package com.mayfool.gitmanager.ui;

import com.mayfool.gitmanager.core.entity.ProjectInfo;

import java.util.List;
import java.util.function.Function;

/**
 * @author zhou.xu
 * @description: 项目表格数据模型
 * 用于在表格中展示项目信息，包括项目名称和远程地址
 * 使用函数式接口实现灵活的数据提取
 * @date 2025/3/10 18:16
 * @since JDK 1.8
 */
public class ProjectTableModel extends CommonTableModel<ProjectInfo> {
    
    private static final long serialVersionUID = 8661817924813403013L;

    /**
     * 表格列名定义
     */
    private static final String[] COLUMN_NAMES = {"项目名称", "远程地址"};

    /**
     * 列值提取器定义
     * 使用Lambda表达式从ProjectInfo对象中提取对应的属性值
     */
    @SuppressWarnings("unchecked")
    private static final Function<ProjectInfo, Object>[] COLUMN_EXTRACTORS = new Function[]{
            (Function<ProjectInfo, Object>) ProjectInfo::getName,        // 项目名称列
            (Function<ProjectInfo, Object>) ProjectInfo::getRemoteUrl    // 远程地址列
    };

    /**
     * 构造函数
     * @param projectInfos 要显示的项目信息列表
     */
    public ProjectTableModel(List<ProjectInfo> projectInfos) {
        super(projectInfos, COLUMN_NAMES, COLUMN_EXTRACTORS);
    }

    /**
     * 获取指定行的项目信息
     * @param row 行索引
     * @return 项目信息对象，如果索引越界则返回null
     */
    public ProjectInfo getProjectInfo(int row) {
        return getData(row);
    }
}